Skip to main content

Prometheus 的预测能力

场景1:你的磁盘剩余空间一直在减少,并且降低的速度比较均匀,你希望知道大概多久之后达到阈值,并希望在某一个时刻报警出来。

场景2:你的 Pod 内存使用率一直升高,你希望知道大概多久之后会到达 Limit 值,并在一定时刻报警 出来,在被杀掉之前上去排查。

Prometheus 的 Deriv 和 Predict_Linear 方法可以满足这类需求, Promtheus 提供了基础的预测能 力,基于当前的变化速度,推测一段时间后的值。

以 mem_free 为例,最近一小时的 free 值一直在下降。

mem_free仅为举例,实际内存可用以mem_available为准

image-20240424021249467

deriv函数可以显示指标在一段时间的变化速度

image-20240424021317500

predict_linear方法是预测基于这种速度,最后可以达到的值:

predict_linear(mem_free{instanceIP="100.75.155.55"}[1h], 2*3600)/1024/1024

你可以基于设置合理的报警规则,如小于 10 时报警:

rule: predict_linear(mem_free{instanceIP="100.75.155.55"}[1h], 2*3600)/1024/1024
<10

predict_linear 与 deriv 的关系: 含义上约等于如下表达式,不过 predict_linear 稍微准确一些。

deriv(mem_free{instanceIP="100.75.155.55"}[1h]) * 2 * 3600+
mem_free{instanceIP="100.75.155.55"}[1h]

如果你要基于 Metric做模型预测,可以参考下forecast-prometheus